package cn.chenyumeng.blog.mapper;

import cn.chenyumeng.blog.entity.Blog;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * @program: blog->BlogMapper
 * @description:
 * @author: cg
 * @create: 2020-07-26 23:14
 **/
@Mapper
public interface BlogMapper {

    /**
     * 通过ID查询单条数据排除描述
     * @param id
     * @return
     */
    Blog queryByIdExcludeDescription(Long id);

    /**
     * 获取通过时间排序的已发布并标题或者内容包含content的博客列表
     * @param content
     * @return
     */
    List<Blog> queryBlogListByLatestPublishedLikeTitleAndContent(String content);

    /**
     * 获取时间排序的已发布博客列表排除Description列
     * @return
     */
    List<Blog> queryBlogListByLatestPublishedAndDESCExcludeDescription();

    /**
     * 通过标签id获取时间排序的已发布博客列表
     * @param tagId
     * @return
     */
    List<Blog> queryBlogListByLatestPublishedAndTagId(Integer tagId);

    /**
     * 通过分类id获取时间排序的已发布博客列表
     * @param typeId
     * @return
     */
    List<Blog> queryBlogListByLatestPublishedAndTypeId(Integer typeId);

    /**
     * 查询发布的最新推荐
     *
     * @param start
     * @param end
     * @return
     */
    List<Blog> queryLatestRecommend(@Param("start") int start, @Param("end") int end);

    /**
     * 查询所有已发布数据
     *
     * @return 实例列表
     */
    List<Blog> queryAllBlogListByLatestPublished();

    /**
     * 查询博客id和所对应的分类id
     *
     * @return
     */
    List<Blog> queryIdAndTypeIdAndPublished();

    /**
     * 通过ID查询单条数据
     *
     * @param id
     * @return
     */
    Blog queryById(Long id);

    /**
     * 查询所有但不包括description
     *
     * @return
     */
    List<Blog> queryAllExcludeDescription();

    /**
     * 查询指定行数据
     *
     * @param page 查询起始位置
     * @param size 查询条数
     * @return 对象列表
     */
    List<Blog> queryAllByLimit(@Param("page") int page, @Param("size") int size);

    /**
     * 通过实体作为筛选条件查询
     *
     * @param blog    实例对象
     * @param blogIds 标签集所对应的博客集
     * @return 对象列表
     */
    List<Blog> queryAllByBlog(@Param("blog") Blog blog, @Param("blogIds") List<Long> blogIds);

    /**
     * 新增数据
     *
     * @param blog 实例对象
     * @return 影响行数
     */
    int insert(Blog blog);

    /**
     * 修改数据
     *
     * @param blog 实例对象
     * @return 影响行数
     */
    int update(Blog blog);

    /**
     * 通过主键删除数据
     *
     * @param id 主键
     * @return 影响行数
     */
    int deleteById(Long id);

}
